/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DTD.Validador;

import Utilidades.VerificadorStrings;
import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class ValidadorVariables {

    private String str;
    private ArrayList<String> nombres;

    public ValidadorVariables() {
        nombres = new ArrayList<String>();
    }

    public void clear() {
        this.nombres.clear();
    }

    public boolean validar(String str) {
        boolean resultado = true;
        this.str = str;

        try {
            if (VerificadorStrings.tieneIgualDe(str, "=", 1, false) == false) {
                resultado = false;
            }
            else if (this.cantidadCamposCorrectos() == false) {
                resultado = false;
            }
            else if (this.camposVacios() == true) {
                resultado = false;
            }
            else if (this.correctoNombreCampo() == false) {
                resultado = false;
            }
            else if (this.correctoValorCampo() == false) {
                resultado = false;
            }
            else if (VerificadorStrings.tieneIgualDe(str, "\"", 2, false) != false) {
                resultado = false;
            }
            else if (this.validarNombresUnicos(str) == false) {
                resultado = false;
            }

        } catch (Exception e) {
            resultado = false;
        } finally {
            return resultado;
        }
    }

    private boolean validarNombresUnicos(String str) {
        boolean resultado = true;
        String nombre = str.split("=")[0];

        if ( ! this.nombres.isEmpty() ) {
            if (nombres.contains(nombre)) {
                resultado = false;
            }
        }
        if (resultado) {
            nombres.add(nombre);
        }
        return resultado;
    }

    private boolean correctoValorCampo() {
        boolean resultado = true;

        try {
            String valor = str.split("=")[1];
            if (VerificadorStrings.esInicioFin(valor, "\"", "\"") == false) {
                resultado = false;
            }
            if (this.validarValoresVacios(valor) == true) {
                resultado = false;
            }

        } catch (ArrayIndexOutOfBoundsException ex) {
            resultado = false;
        } finally {
            return resultado;
        }
    }

    private boolean validarValoresVacios(String valor) {
        String aux = valor.replaceAll("\"", "").trim();
        return aux.equals("");
    }

    private boolean correctoNombreCampo() {
        boolean resultado = true;
        String nombre = str.split("=")[0];

        if (VerificadorStrings.soloTextosYGuiones(nombre) == false) {
            resultado = false;
        }
        return resultado;
    }

    private boolean camposVacios() {
        boolean resultado = true;

        try {
            resultado = str.split("=")[0].equals("") || str.split("=")[1].equals("");
        } catch (Exception e) {
            resultado = false;
        } finally {
            return resultado;
        }
    }

    private boolean cantidadCamposCorrectos() {
        return str.split("=").length == 2;
    }
}
